<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META content="text/html; charset=ISO-8859-2" http-equiv="content-type">
<meta name="robots" content="index,follow">
<META NAME="Keywords" CONTENT="XOR, hex, javascript">
<meta name="viewport" content="width=device-width, initial-scale=1">
<META NAME="Author" CONTENT="Tomasz Ostrowski">
<META name="description" content="Javascript: XOR of two hexadecimal strings">  
<link rel="stylesheet" type="text/css" media="only screen and (max-width: 959px)" href="./css/mobile.css" />
<link rel="stylesheet" type="text/css" media="only screen and (min-width: 960px)" href="./css/main.css" />
<script type="text/javascript" src="./js/tree.js"></script>


<script src="./js/jquery-2.1.3.min.js"></script>
<!-- <link rel="stylesheet" type="text/css" href="./css/jquery-eu-cookie-law-popup.css"/>
<script src="./js/jquery-eu-cookie-law-popup-en.js"></script> -->

<title>XOR of two hexadecimal strings</title>  
</head>
<body class="eupopup eupopup-bottomleft eupopup-style-compact">

<div id="wrap">
<div id="header">
<div id="header_l">
  <a href="../index.htm">erma0.cn</a>
</div>
<div id="header_r"><A HREF="./xor.htm" TARGET="_self"><strong>ENGLISH VERSION</strong></A><br><A HREF="./xor.php?lang=pl" TARGET="_self"><strong>WERSJA POLSKA</strong></A></div>      
</div>

<a href="../bot-trap/">
  <img src="./images/pixel.gif" border="0" alt=" " width="1" height="1">
</a>
     

<script type="text/javascript">
//<!--
    function clean_hex(input, remove_0x) {
        input = input.toUpperCase();

        if (remove_0x) {
            input = input.replace(/0x/gi, "");
        }

        var orig_input = input;
        input = input.replace(/[^A-Fa-f0-9]/g, "");
        if (orig_input != input)
            alert("Warning! Non-hex characters (including newlines) in input string ignored.");
        return input;
    }

    var hD = '0123456789ABCDEF';

    function dec2hex(d) {
        var h = hD.substr(d & 15, 1);
        while (d > 15) {
            d >>= 4;
            h = hD.substr(d & 15, 1) + h;
        }
        return h;
    }

    function Convert() {
        var cleaned_hex_src = clean_hex(document.frmConvert.hex_src.value, document.frmConvert.chbSeparator.checked);
        document.frmConvert.cleaned_hex_src.value = cleaned_hex_src;
        if (cleaned_hex_src.length % 2) {
            alert("Error: cleaned hex source string length is odd.");
            return;
        }

        var cleaned_hex_key = clean_hex(document.frmConvert.hex_key.value, document.frmConvert.chbSeparator.checked);
        document.frmConvert.cleaned_hex_key.value = cleaned_hex_key;
        if (cleaned_hex_key.length % 2) {
            alert("Error: cleaned hex key string length is odd.");
            return;
        }

        var binary_src = new Array();
        for (var i = 0; i < cleaned_hex_src.length / 2; i++) {
            var h = cleaned_hex_src.substr(i * 2, 2);
            binary_src[i] = parseInt(h, 16);
        }

        var binary_key = new Array();
        for (var i = 0; i < cleaned_hex_key.length / 2; i++) {
            var h = cleaned_hex_key.substr(i * 2, 2);
            binary_key[i] = parseInt(h, 16);
        }

        var binary_out = new Array();
        for (var i = 0; i < binary_src.length; i++) {
            binary_out[i] = binary_src[i] ^ binary_key[i % binary_key.length];
        }

        var hexText = "";
        var separator1 = "",
            separator2 = "";
        var newline = document.frmConvert.chbNewline.checked;
        if (document.frmConvert.chbSeparatorOut.checked) {
            separator1 = "0x";
            separator2 = ", "
        }
        for (i = 0; i < binary_out.length; i++) {
            var charVal = binary_out[i];
            hexText = hexText + separator1 + (charVal < 16 ? "0" : "") + dec2hex(charVal) + separator2;
            if (newline) {
                if ((i % 16) == 15) {
                    hexText += "\n";
                }
            }
        }
        document.frmConvert.hex_out.value = hexText;
    }

//-->
</script>


<div id="main">

    <h1>XOR of two hexadecimal strings</h1>
    <p>Calculate XOR of two hexadecimal strings. By convention first string (byte array) is treated as source (or plaintext), second byte array is treated as key and looped if it is shorted than first one.
    </p>
    <form name="frmConvert" action="">
        <p>First ("source"/"plaintext") byte array as hex string:</p>
        <p>
            <textarea name="hex_src" rows="3" cols="87" style="width: 700px;"></textarea>
        </p>
        <p>Second ("key", looped if necessary) byte array as hex string:</p>
        <p>
            <textarea name="hex_key" rows="3" cols="87" style="width: 700px;"></textarea>
        </p>
        <p>Note: all characters outside hex set will be ignored, thus "12AB34" = "12 AB 34" = "12, AB, 34", etc. Strings are case-insensitive.</p>
        <p>Note 2: using "FF" as key effectively negates all source bits.</p>
        <p>Options:</p>
        <p>
            <input type="checkbox" name="chbSeparator" value="sep" checked="checked">source/key: remove "0x" groups from strings
            <br>
            <input type="checkbox" name="chbSeparatorOut" value="sep_out" checked="yes">output: use 0x and comma as separator (C-like)
            <br>
            <input type="checkbox" name="chbNewline" value="newline" checked="yes">output: insert newlines after each 16B
        </p>
    
        <p>
            <button type=button name="btnConvert" onclick="Convert()">
                Generate XOR-ed array
            </button>
        </p>
        <p>Cleaned source:</p>
        <p>
            <input type="text" name="cleaned_hex_src" readonly="readonly" value="" style="width: 700px;">
        </p>
        <p>Cleaned key:</p>
        <p>
            <input type="text" name="cleaned_hex_key" readonly="readonly" value="" style="width: 700px;">
        </p>
        <p>Output (XOR result) hex:</p>
        <p>
            <textarea name="hex_out" rows="3" cols="87" style="width: 700px;"></textarea>
        </p>
    
    </form>
  </div>
<div id="sidebar">
<h3>Sitemap</h3>

<ul id="tree0" class="tree">

    <li ><a>PROJECTS</a>
    <ul>
    <li><A HREF="../programator.htm" TARGET="_self">FLASH 49F programmer</A></li> 
    </ul>
    </li>

 
    <li><a>ONLINE TOOLS</a>
    <ul>
    <li><a href="./base64.htm" TARGET="_self">Base64 -&gt; HEX</A></li>
    <li><a href="./base32.htm" TARGET="_self">Base32 -&gt; HEX</a></li>
    <li><a href="./base32hex.htm" TARGET="_self">Base32hex -&gt; HEX</a></li>
    <li><a href="./ascii.htm" TARGET="_self">ASCII -&gt; HEX</a></li>
    <li><a href="./ascii_uN.htm" TARGET="_self">ASCII -&gt; u16/u32/u64 HEX</a></li>            
    <li><a href="./hex_to_base64.htm" TARGET="_self">HEX -&gt; Base64</a></li>
    <li><a href="./text_to_base64.htm" TARGET="_self">Text -&gt; Base64</a></li>
    <li><a href="./hex_to_base32.htm" TARGET="_self">HEX -&gt; Base32</a></li>
    <li><a href="./hex_to_base32hex.htm" TARGET="_self">HEX -&gt; Base32hex</a></li>
    <li><a href="./hex_to_ascii.htm" TARGET="_self">HEX -&gt; ASCII</a></li>
    <li><a href="./hex_to_dec.htm" TARGET="_self">HEX -&gt; DEC</a></li>	
    <li><a href="./dec_to_ascii.htm" TARGET="_self">DEC -&gt; ASCII</a></li>
    <li><a href="./bin_to_32bit_hex.htm" TARGET="_self">BIN &lt;-&gt; 32-bit hex</a></li>    
    <li><a href="./md5.htm" TARGET="_self">MD5 calculator</a></li>
    <li><a href="./sha1.htm" TARGET="_self">SHA1 calculator</a></li>    
    <li><a href="./regexp.htm" TARGET="_self">Regular exp.</a></li>
    <li><a href="./cpp_text_escape.htm" TARGET="_self">Text -&gt; Cpp</a></li>
    <li><a href="./cpp_unescape.htm" TARGET="_self">Cpp -&gt; text</a></li>
    <li><a href="./pascal_escape.htm" TARGET="_self">Text -&gt; Pascal</a></li>        
    <li><a href="./hex_to_file.htm" TARGET="_self">HEX -&gt; file</a></li>
    <li><a href="./file_to_hex.htm" TARGET="_self">File -&gt; HEX</a></li>
    <li><a href="./file_to_base64.htm" TARGET="_self">File -&gt; Base64</a></li>    
    <li><a href="./html_list_gen.htm" TARGET="_self">Text -&gt; HTML ul</a></li>
    <li><a href="./crc8.htm" TARGET="_self">CRC8</a></li>
    <li><a href="./wave_gen.htm" TARGET="_self">WAVE generator</a></li>
    <li><a href="./bin_decoder.htm" TARGET="_self">Bin decoder</a></li>
    <li><a href="./rc4.htm" TARGET="_self">RC4</a></li>          
    <li><a href="./xor.htm" TARGET="_self">XOR</a></li>
    <li><a href="./inv.htm" TARGET="_self">Inverting bits</a></li>
    <li><a href="./par_resistors.htm" TARGET="_self">Par. resistors search</a></li>
    <li><a href="./unique_str.htm" TARGET="_self">Deduplicate / sort</a></li>        
    <li><a href="./base64_to_PEM.htm" TARGET="_self">Base64 -&gt; PEM</a></li>
    <li><a href="./PEM_to_base64.htm" TARGET="_self">PEM -&gt; base64</a></li>
    <li><a href="./diskstats.htm" TARGET="_self">/proc/diskstats</a></li>    
    </ul>
    </li> 


    <li><A HREF="../contact2.htm" TARGET="_self">Contact</A></li></ul>
<script type="text/javascript">
//<!--
new tree("tree0");
//-->
</script>

<br>  
<br>  
<br>  





  <br>    

        
    
</div>


<div id="footer">




  
</div>


<br>
<div id="footer2"><p>      
            <!-- <font size="-2">&nbsp;"Cookie monsters": 5583818&nbsp;&nbsp;&nbsp;&nbsp;Parse time:&nbsp;0.000 s</font> -->

  </p>
	</div>
</div>
</body>
</html>

